package controllers

import (
	"chuanyou/db"
	"chuanyou/models"
	"crypto/tls"
	"encoding/json"
	"fmt"

	beego "github.com/beego/beego/v2/server/web"
	"gopkg.in/gomail.v2"
)

type MainController struct {
	beego.Controller
}

type Classmates struct {
	Name      string
	Sn        string
	Age       int
	Classname string
}

func (c *MainController) Get() {
	c.Data["Website"] = "beego.me"
	c.Data["Email"] = "astaxie@gmail.com"
	c.TplName = "index.tpl"
}

func (c *MainController) Login() {

	c.TplName = "Login.html"
}

func (c *MainController) Zhuce() {
	c.Data["Name"] = "姜玉印"
	c.Data["Sn"] = "220320204005"
	c.Data["Age"] = "1"
	c.Data["Email"] = "astaxie@gmail.com"
	c.TplName = "zhuce.html"
}

func (c *MainController) Zhuanzhang() {
	c.Data["Website"] = "转账"
	c.Data["Email"] = "astaxie@gmail.com"
	c.TplName = "index.tpl"
}

func (c *MainController) Denglu() {

	c.TplName = "login.html"
}

func (c *MainController) YanZhengLogin() {

	sn := c.GetString("sn")

	pswd := c.GetString("pswd")
	fmt.Println("收到了前端发过来的数据:", sn, pswd)

	var currentPerson models.Classmates
	db.DB.Raw("select * from chuanyou.classmates where sn=?", sn).Scan(&currentPerson)

	if currentPerson.Pswd == pswd {
		c.Data["json"] = currentPerson
	} else {
		c.Data["json"] = nil
	}

	c.ServeJSON()
}

func (c *MainController) Register() {

	c.TplName = "zhuce.html"
}

func (c *MainController) DoRegister() {
	var userinfo models.Classmates
	err := json.Unmarshal(c.Ctx.Input.RequestBody, &userinfo)
	if err != nil {
		fmt.Println("接收用户注册信息报错：", err.Error())
		return
	}

	tx := db.DB.Create(userinfo)
	if tx.Error != nil {
		c.Data["json"] = "注册失败，原因是：" + tx.Error.Error()
		c.ServeJSON()
		return
	}
	c.Data["json"] = "注册成功"
	c.ServeJSON()
}

func (c *MainController) SendEmail() error {

	// QQ 邮箱：
	host := "smtp.qq.com"
	port := 25
	userName, _ := beego.AppConfig.String("email_user")
	password, _ := beego.AppConfig.String("email_pswd")

	m := gomail.NewMessage()
	m.SetHeader("From", "2410669370@qq.com") // 发件人
	// m.SetHeader("From", "alias"+"<"+userName+">") // 增加发件人别名

	m.SetHeader("To", "2410669370@qq.com")  // 收件人，可以多个收件人，但必须使用相同的 SMTP 连接
	m.SetHeader("Cc", "2410669370@qq.com")  // 抄送，可以多个
	m.SetHeader("Cc", "2410669370@qq.com")  // 抄送，可以多个
	m.SetHeader("Bcc", "2410669370@qq.com") // 暗送，可以多个
	m.SetHeader("Subject", "大家好!")          // 邮件主题

	// text/html 的意思是将文件的 content-type 设置为 text/html 的形式，浏览器在获取到这种文件时会自动调用html的解析器对文件进行相应的处理。
	// 可以通过 text/html 处理文本格式进行特殊处理，如换行、缩进、加粗等等
	m.SetBody("text/html", `  <p> 姜玉印 </p>  `)

	// text/plain的意思是将文件设置为纯文本的形式，浏览器在获取到这种文件时并不会对其进行处理
	// m.SetBody("text/plain", "纯文本")
	m.Attach("D:/wwwwwww/src/chuanyou/views/1.jpg") // 照片

	d := gomail.NewDialer(
		host,
		port,
		userName,
		password,
	)
	// 关闭SSL协议认证
	d.TLSConfig = &tls.Config{InsecureSkipVerify: true}

	if err := d.DialAndSend(m); err != nil {
		panic(err)

	}
	c.Data["json"] = "成功"
	c.ServeJSON()
	return nil
}

func (c *MainController) Updateinfo() {

	c.TplName = "updateInfo.html"
}

func (c *MainController) Updatepswd() {

	c.TplName = "updatePswd.html"
}

// 修改用户资料
func (c *MainController) DoUpdateInfo() {
	// 用一个变量来接收  前端的数据
	var userinfo models.Classmates
	// 解码 前端发过来的json  到userinfo 变量里
	err := json.Unmarshal(c.Ctx.Input.RequestBody, &userinfo)
	if err != nil {
		fmt.Println("接收用户注册信息报错：", err.Error())
		c.Data["json"] = err.Error()
		c.ServeJSON()
		return
	}
	// 将新数据 进行修改
	// tx := db.DB.Update()
	// if tx.Error != nil {
	// 	c.Data["json"] = "注册失败，原因是:" + tx.Error.Error()
	// 	c.ServeJSON()
	// 	return
	// }
	c.Data["json"] = "修改成功"
	c.ServeJSON()
}
